// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 
// Source File Name:   ListaProcesosEnCurso.java
package wasolicitudesfiec.general;

import web.util.Constantes;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import com.sun.rave.web.ui.component.*;
import entidad.Usuario;
import entidad.apertura.Solicitudaperturapostgrado;
import entidad.apertura.Solicitudaperturatopico;
import entidad.ayudantias.*;
import entidad.cambioCarrera.Solicitudcambiocarrera;
import entidad.convalidacionMateria.Solicitudconvalidacionmateria;
import hero.interfaces.BnNodeValue;
import hero.interfaces.ProjectSession;
import hero.interfaces.UserSession;
import hero.util.HeroException;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.FacesException;
import javax.faces.application.FacesMessage;
import javax.faces.convert.DateTimeConverter;
import javax.servlet.http.HttpServletResponse;
import wasolicitudesfiec.authentication.AuthenticationPhaseListener;
import wasolicitudesfiec.*;
import wasolicitudesfiec.logicacontrol.*;
import wasolicitudesfiec.plantillas.PanelIzquierdo;
import wasolicitudesfiec.registros.Rg_Solicitud;
import web.util.ManejadorCookies;

public class ListaProcesosEnCurso extends AbstractPageBean {

    private Dp_ProcesosEnCurso dp_ProcesosEnCurso = new Dp_ProcesosEnCurso();
    private boolean tieneProcesosEnCurso;
    private LogicaHistorial logicaHistorial;
	private HttpServletResponse response;
	private String contextPath;
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">
    private void _init()
            throws Exception {
        dateTimeConverter1.setTimeZone(java.util.TimeZone.getTimeZone("America/Guayaquil"));
        dateTimeConverter1.setLocale(new java.util.Locale("es", "EC", ""));
        dateTimeConverter1.setPattern("dd/MM/yyyy H:mm");
        dateTimeConverter1.setType("both");
    }

    public Page getPage1() {
        return page1;
    }

    public void setPage1(Page p) {
        page1 = p;
    }

    public Html getHtml1() {
        return html1;
    }

    public void setHtml1(Html h) {
        html1 = h;
    }

    public Head getHead1() {
        return head1;
    }

    public void setHead1(Head h) {
        head1 = h;
    }

    public Link getLink1() {
        return link1;
    }

    public void setLink1(Link l) {
        link1 = l;
    }

    public Body getBody1() {
        return body1;
    }

    public void setBody1(Body b) {
        body1 = b;
    }

    public Form getForm1() {
        return form1;
    }

    public void setForm1(Form f) {
        form1 = f;
    }
    private Logica logica;
    private DateTimeConverter dateTimeConverter1 = new DateTimeConverter();

    public DateTimeConverter getDateTimeConverter1() {
        return dateTimeConverter1;
    }

    public void setDateTimeConverter1(DateTimeConverter dtc) {
        this.dateTimeConverter1 = dtc;
    }
    private Table tbProcesosEnCurso = new Table();

    public Table getTbProcesosEnCurso() {
        return tbProcesosEnCurso;
    }

    public void setTbProcesosEnCurso(Table t) {
        this.tbProcesosEnCurso = t;
    }
    private Hyperlink linkActividadActual = new Hyperlink();

    public Hyperlink getLinkActividadActual() {
        return linkActividadActual;
    }

    public void setLinkActividadActual(Hyperlink h) {
        this.linkActividadActual = h;
    }
    private StaticText stActividadActual = new StaticText();

    public StaticText getStActividadActual() {
        return stActividadActual;
    }

    public void setStActividadActual(StaticText st) {
        this.stActividadActual = st;
    }
// </editor-fold>

    public ListaProcesosEnCurso() {
        page1 = new Page();
        html1 = new Html();
        head1 = new Head();
        link1 = new Link();
        body1 = new Body();
        form1 = new Form();

    }
    private UserSession userSession;
    private ProjectSession projectSession;
    private Usuario usuario;

    @Override
    public void init() {
        super.init();
        try {
            _init();
        } catch (Exception e) {
            log("ListaSolicitudesAyudantes Initialization Failure", e);
            throw (e instanceof FacesException) ? (FacesException) e : new FacesException(e);
        }
		response = (HttpServletResponse) getFacesContext().getExternalContext().getResponse();
		contextPath = getFacesContext().getExternalContext().getRequestContextPath();
        logica = new Logica();
        logicaHistorial = new LogicaHistorial();
        projectSession = logica.getProjectSession();
        userSession = logica.getUserSession();
        usuario = (Usuario) getSessionMap().get(AuthenticationPhaseListener.USER_SESSION_KEY);

        ArrayList<String> listaProcesosEnCurso;
        Vector<Rg_Solicitud> listaRgSolicitudes = new Vector<Rg_Solicitud>();
        Rg_Solicitud rg_solicitud;
        Solicitudayudantia solicitudAyudantia = null;
        Solicitudserayudante solicitudserayudante = null;
        Solicitudcambiocarrera solicitudcambiocarrera = null;
        Solicitudconvalidacionmateria solicitudconvalidacionmateria = null;
        Solicitudaperturatopico solicitudaperturatopico = null;
        Solicitudaperturapostgrado solicitudaperturapostgrado = null;
        int idSolicitud;
        this.getMenu().setTitulo("Solicitudes Activas");
        FacesMessage message;
        String modelo;
        try {
            if (!(userSession != null && projectSession != null)) {
                throw new Exception();
            }
            Vector<Rg_Solicitud> listaProcesos = logicaHistorial.leerProcesosEnCursoPorUsuario((String) userSession.getUser());
            if (listaProcesos.isEmpty()) {
                this.setTieneProcesosEnCurso(false);
            } else {
                this.setTieneProcesosEnCurso(true);
            }

            Collection<String> instancias = userSession.getInstancesListNames();
            if (instancias.isEmpty()) {
                this.setTieneProcesosEnCurso(false);
            } else {
                this.setTieneProcesosEnCurso(true);
            }

			if (!isTieneProcesosEnCurso()){
           	ManejadorCookies.agregarCookieMensaje(response, "Actualmente no posee solicitudes activas." ,contextPath+"/faces/general/Mensaje.jsp/" );
				getFacesContext().getApplication().getNavigationHandler().handleNavigation(getFacesContext(), null, "mensaje");
				getFacesContext().responseComplete();
			}
            for (String instancia : instancias) {
                userSession.getModelInstancesTodoList(instancia);
                projectSession.initProject(instancia);
                rg_solicitud = new Rg_Solicitud();
                idSolicitud = new Integer(projectSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
                modelo = projectSession.getProjectNameOfInstance(instancia);
                if (modelo.equals(Constantes.Modelo.modelo_SolicitarAyudantes)) {
                    solicitudAyudantia = logica.getLogAyudantia().leerSolicitudayudantiaNivel2(idSolicitud);
                    solicitudAyudantia.setModelo(modelo);
                    rg_solicitud = llenarRegistroProcesoEnCurso(solicitudAyudantia);
                }
                if (modelo.equals(Constantes.Modelo.modelo_SolicitarSerAyudante)) {
                    solicitudserayudante = logica.getLogAyudantia().leerSolicitudserayudanteNivel2(idSolicitud);
                    solicitudserayudante.setModelo(modelo);
                    solicitudserayudante.setEjecutor(solicitudserayudante.getSolicitudayudantia().getProfesor().getPersona().toString());
                    rg_solicitud = llenarRegistroProcesoEnCurso(solicitudserayudante);
                }
                if (modelo.equals(Constantes.Modelo.modelo_SolicitarCambioCarrera)) {
                    solicitudcambiocarrera = logica.getLogCambioCarrera().leerSolicitudCambioNivel2(idSolicitud);
                    solicitudcambiocarrera.setModelo(modelo);
                    rg_solicitud = llenarRegistroProcesoEnCurso(solicitudcambiocarrera);
                }
                if (modelo.equals(Constantes.Modelo.modelo_SolicitarConvalidacionMateria)) {
                    solicitudconvalidacionmateria = logica.getLogConvalidacionMateria().leerSolicitudConvalidacionNivel2(idSolicitud);
                    solicitudconvalidacionmateria.setModelo(modelo);
                    rg_solicitud = llenarRegistroProcesoEnCurso(solicitudconvalidacionmateria);
                }
                if (modelo.equals(Constantes.Modelo.modelo_SolicitarAperturaPostgrado)) {
                    solicitudaperturapostgrado = logica.getLogAperturaPostgrado().leerSolicitudApertura(idSolicitud);
                    solicitudaperturapostgrado.setModelo(modelo);
                    rg_solicitud = llenarRegistroProcesoEnCurso(solicitudaperturapostgrado);
                }
                listaRgSolicitudes.add(rg_solicitud);
            }

//                for (Rg_Solicitud proceso : listaProcesos) {
//                    String instancia = proceso.getNombreinstanciaproceso();
//                    //si noes una intancia lanza una exception
//                    userSession.getModelInstancesTodoList(instancia);
//                    projectSession.initProject(instancia);
//                    idSolicitud = Integer.parseInt(projectSession.getProperty(Constantes.Atributo.idSolicitudProceso).getTheValue());
//                    modelo = projectSession.getProjectNameOfInstance(instancia);
//                    rg_solicitud = new Rg_Solicitud();

            this.getDp_ProcesosEnCurso().setListaRgSolicitudes(listaRgSolicitudes);
        } catch (Exception ex) {
            ex.printStackTrace();
            Logger.getLogger(ListaProcesosEnCurso.class.getName()).log(Level.SEVERE, null, ex);
            message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Ocurrió un error no esperado, comuníquese con el adminsitrador del sistema", ex.getLocalizedMessage());
            getFacesContext().addMessage(null, message);
        }
    }

    private Rg_Solicitud llenarRegistroProcesoEnCurso(Rg_Solicitud solicitud) throws HeroException, RemoteException, SQLException {
        String rolUsuarioCreador = "";
        int estate;
        BnNodeValue actividad;
        String usuarioCreador = this.projectSession.getCreator();
        ArrayList<String> roles = (ArrayList<String>) this.projectSession.getUserRolesInProjectNames(usuarioCreador);
        for (String rol : roles) {
            //tomando en cuenta que el usuario creador solo puede tener un rol en el proceso.
            rolUsuarioCreador = rol;
        }
        String rolEjecutor = " ", usuarioEjecutor = "", nombreEjecutor = " ", nombreActividad = " ";

        Collection actividades = this.projectSession.getNodesNames();
        boolean isActividadInformePostgrado;
        int numActividadesPendientes = 0;
        for (Object elem : actividades) {
            estate = this.projectSession.getNodeState((String) elem);
            // en este caso estoy tomando la primera actividad en estado ready que encuentre
            if (estate == 1) {
                numActividadesPendientes++;
                actividad = this.userSession.getNode(solicitud.getNombreinstanciaproceso(), (String) elem);

                //concatenamos en caso de que haya mas d euna actividad en estado ready=1
                nombreActividad += (String) elem + ", ";
                rolEjecutor += actividad.getBnRole().getName() + ", ";
                isActividadInformePostgrado = Constantes.SolicitarAperturaPostgrado.emitirInformeEvaluador1.equals(actividad.getName()) ||
                        Constantes.SolicitarAperturaPostgrado.emitirInformeEvaluador2.equals(actividad.getName()) ||
                        Constantes.SolicitarAperturaPostgrado.emitirInformeEvaluador3.equals(actividad.getName());

                if (Constantes.SolicitarCambio.emitirInforme.equals(actividad.getName()) ||
                        Constantes.SolicitarConvalidacion.emitirInforme.equals(actividad.getName()) ||
                        isActividadInformePostgrado) {
                    usuarioEjecutor = actividad.getActivityPerformer();
                    nombreEjecutor += logica.leerPersonaPorUsuario(usuarioEjecutor).toString() + ", ";
                    //la actividad emitir informe se debe llamar igual en todos los procesos.
                    //esto lo hacemos para que en las actividades de postgrado no salga el numero ej. mitir Informe Evaluador 1
//                    String actividadEvalaucion = Constantes.SolicitarAperturaPostgrado.emitirInformeEvaluador1;
//                    nombreActividad += actividadEvalaucion.substring(0, actividadEvalaucion.length() - 1) + ", ";
                } else if (!actividad.getBnRole().getName().equals("comodin")) {
                    for (Object object : this.projectSession.getUsersRole(actividad.getBnRole().getName())) {
                        usuarioEjecutor = (String) object;
                        nombreEjecutor += logica.leerPersonaPorUsuario(usuarioEjecutor).toString() + ", ";
                    }
                } else if (actividad.getBnRole().getName().equals("comodin")) {
                    //si es comodin preguntamos si pertenece a los modelos donde existe este usuario y lo mapeamos al correspondiente rol y usuario.
                    if (solicitud.getModelo().equals(Constantes.Modelo.modelo_SolicitarAyudantes)) {
                        rolEjecutor = "Sistema, ";
                        nombreEjecutor=", ";
                    }
                    if (solicitud.getModelo().equals(Constantes.Modelo.modelo_SolicitarSerAyudante)) {
                        rolEjecutor = "Profesor, ";
                        nombreEjecutor = solicitud.getEjecutor() + ", ";
                    }
                }
                
            }
        }
        //actividad pendiente se pueda realizar desde aqui.

        if (usuarioEjecutor.equals(usuario.getUsuario()) && numActividadesPendientes == 1) {
            solicitud.setEjecutorEsUsuarioLogoneado(true);
//                    this.getLinkActividadActual().setRendered(true);
//                    this.getStActividadActual().setRendered(false);
                } else {
            solicitud.setEjecutorEsUsuarioLogoneado(false);
//                    this.getLinkActividadActual().setRendered(false);
//                    this.getStActividadActual().setRendered(true);
                }

        //quitamos la coma que queda al final
        solicitud.setEjecutor(nombreEjecutor.substring(0, nombreEjecutor.lastIndexOf(",")));
        solicitud.setRolEjecutor(rolEjecutor.substring(0, rolEjecutor.lastIndexOf(",")));
        solicitud.setActividad(nombreActividad.substring(0, nombreActividad.lastIndexOf(",")));
        solicitud.setSolicitante(logica.leerPersonaPorUsuario(usuarioCreador).toString());
        solicitud.setRolSolicitante(rolUsuarioCreador);

        return solicitud;
    }

    @Override
    public void preprocess() {
    }

    @Override
    public void prerender() {
        if (getPanelIzquierdo() != null) {
            getPanelIzquierdo().miPrerender();
        }
    }

    @Override
    public void destroy() {
    }

    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    protected PanelIzquierdo getPanelIzquierdo() {
        return (PanelIzquierdo) getBean("plantillas$PanelIzquierdo");
    }
    private int __placeholder;
    private Page page1;
    private Html html1;
    private Head head1;
    private Link link1;
    private Body body1;
    private Form form1;

    public boolean isTieneProcesosEnCurso() {
        return tieneProcesosEnCurso;
    }

    public void setTieneProcesosEnCurso(boolean tieneProcesosEnCurso) {
        this.tieneProcesosEnCurso = tieneProcesosEnCurso;
    }

    public Dp_ProcesosEnCurso getDp_ProcesosEnCurso() {
        return dp_ProcesosEnCurso;
    }

    public void setDp_ProcesosEnCurso(Dp_ProcesosEnCurso dp_ProcesosEnCurso) {
        this.dp_ProcesosEnCurso = dp_ProcesosEnCurso;
    }

    public Menu getMenu() {
        return (Menu) getBean("SolicitudesFIEC$Menu");
    }
}
